package com.edoomath.api.servcice;

import java.util.List;
import java.util.Map;

import com.edoomath.entity.course.Course;
import com.edoomath.entity.course.CourseItem;
import com.edoomath.entity.course.CourseItemStat;
import com.edoomath.entity.course.CourseMaterail;
import com.edoomath.entity.course.CourseMaterialCategory;
import com.edoomath.entity.course.CourseText;
import com.edoomath.entity.usercourse.UserCourseItem;
import com.edoomath.entity.usercourse.UserCourseTask;

public interface CourseItemService {
    
    /**
     * 
     * @param id
     * @return
     */
    public CourseItem loadCourseItem(Long id);
    
    /**
     * 
     * @param courseItem
     * @return
     */
    public CourseItemStat loadCourseItemStat(CourseItem courseItem);
    
    /**
     * 
     * @param course
     * @return
     */
    public List<CourseItem> listCourseItem(Course course);
    
    /**
     * 
     * @param courseItemId
     * @return
     */
    public Map<String, List<CourseMaterail>> listCourseMaterial(Long courseItemId);
    
    /**
     * 
     * @param courseItem
     * @param type
     * @return
     */
    public List<CourseMaterail> listCourseMaterial(CourseItem courseItem, List<String> types);
    
    /**
     * 
     * @param courseMaterialCategory
     * @return
     */
    public List<CourseMaterail> listCourseMaterial(CourseMaterialCategory courseMaterialCategory);
    
    /**
     * 
     * @param courseMaterialCategory
     * @return
     */
    public CourseMaterail loadCourseMaterial(CourseMaterialCategory courseMaterialCategory);
    
    /**
     * 
     * @param courseItem
     * @return
     */
    public List<CourseMaterialCategory> listCourseMaterialCategory(CourseItem courseItem);
    
    /**
     * 
     * @param id
     * @return
     */
    public CourseMaterialCategory loadCourseMaterialCategory(Long id);
    
    /**
     * 
     * @param userCourseItem
     * @return
     */
    public List<UserCourseTask> listCourseTask(UserCourseItem userCourseItem);
    
    /**
     * 
     * @param courseItem
     * @param type
     * @return
     */
    public CourseMaterail loadCourseMaterialZip(CourseItem courseItem, String type);
    
    /**
     * 
     * @param courseItem
     * @param type
     * @return
     */
    public List<CourseText> listCourseText(CourseItem courseItem, String type);
}
